package com.cqhilink.iot.jobstandardmanagement.dao.mapper;

import com.cqhilink.iot.jobstandardmanagement.facade.model.Department;
import com.cqhilink.iot.jobstandardmanagement.facade.model.DepartmentVO;
import com.cqhilink.iot.jobstandardmanagement.facade.model.EmployeeSimpleVO;

import java.util.List;

/**
 * @author YuPeng
 *         部门Dao
 */
public interface DepartmentMapper {
    /**
     * 按ID删除部门（硬删除）
     *
     * @param depId
     * @return
     */
    int deleteByPrimaryKey(Object depId);

    /**
     * 新增部门
     *
     * @param record
     * @return
     */
    int insert(Department record);

    /**
     * 根据参数新增部门
     *
     * @param record
     * @return
     */
    int insertSelective(Department record);

    /**
     * 根据ID，选择参数修改部门
     *
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(Department record);

    /**
     * @param record
     * @return
     */
    int updateByPrimaryKey(Department record);

    /**
     * 获取所有的部门列表
     *
     * @return
     */
    List<Department> selectAll();

    /**
     * 获取上级部门的下级部门数量
     *
     * @param deptId
     * @return
     */
    int selectCountByPDId(String deptId);

    /**
     * 根据ID查询
     *
     * @param deptId
     * @return
     */
    Department selectById(String deptId);

    /**
     * 获取上级机构的下级部门数量
     *
     * @param orgId
     * @return
     */
    int selectCountByPOId(String orgId);

    /**
     * 按上级部门ID查询下级部门列表
     *
     * @param deptId
     * @return
     */
    List<DepartmentVO> selectByPDId(String deptId);

    /**
     * 按部门ID获取部门对象
     *
     * @param deptId
     * @return
     */
    DepartmentVO selectByDeptId(String deptId);

    /**
     * 按上级机构ID查询下级部门列表
     *
     * @param orgId
     * @return
     */
    List<DepartmentVO> selectByPOId(String orgId);

    /**
     * 根据orgId集合查询部门信息
     *
     * @param record
     * @return
     */
    List<Department> selectByPOIds(Department record);

    /**
     * 批量添加部门
     *
     * @param deptList
     * @return
     */
    int insertByList(List<Department> deptList);

    /**
     * 删除部门
     *
     * @param deptId
     * @return
     */
    int deleteByDeptId(String deptId);

    /**
     * 按部门ID和名称查询部门，用户校验部门名称是否重复
     *
     * @param record
     * @return
     */
    List<DepartmentVO> selectByPDidAndName(Department record);

    /**
     * 按上级组织机构ID及部门名称查询部门，用于校验部门名称是否重复
     *
     * @param record
     * @return
     */
    List<DepartmentVO> selectByPOidAndName(Department record);

    /**
     * 按部门ID获取员工列表
     *
     * @param deptId
     * @return
     */
    List<EmployeeSimpleVO> selectEmpByDeptId(String deptId);

    /**
     * 获取员工信息
     *
     * @param empId
     * @return
     */
    EmployeeSimpleVO selectEmpByEmpId(String empId);

    /**
     * 部门树模糊查询
     *
     * @param keyword
     * @return
     */
    List<DepartmentVO> findOrgKeyword(String keyword);

    /**
     * @param
     * @param parentOrgId
     */
    List<Department> selectDeptByOrgId(String parentOrgId);

    /**
     * @param list
     * @Author 卢曼成
     * @Description 批量添加
     * @Date 2017/2/8 17:17
     */
    int insertList(List<Department> list);

    /**
     * @param list
     * @Author 卢曼成
     * @Description 批量修改
     * @Date 2017/2/8 17:17
     */
    int updateList(List<Department> list);

    /**
     * @param list
     * @Author 卢曼成
     * @Description 批量逻辑删除
     * @Date 2017/2/8 17:18
     */
    int deleteList(List<Department> list);

    /**
     * @Author 卢曼成
     * @Description 去重查询上级ID
     * @Date 2017/2/8 17:18
     */
    List<DepartmentVO> selectByOrgItem(Department record);

    /**
     * @Author 卢曼成
     * @Description 去重查询上级ID
     * @Date 2017/2/8 17:18
     */
    List<String> selectByListId(List<Department> list);
}